package hu.bme.mit.androtext.age.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import hu.bme.mit.androtext.age.services.AgeGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalAgeParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'AndroidApplication'", "'{'", "'projectName'", "'package'", "'datamodel'", "'uimodel'", "'}'", "'.'"
    };
    public static final int RULE_ID=5;
    public static final int RULE_STRING=4;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalAgeParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g"; }



     	private AgeGrammarAccess grammarAccess;
     	
        public InternalAgeParser(TokenStream input, IAstFactory factory, AgeGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AndroidApplication";	
       	}
       	
       	@Override
       	protected AgeGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleAndroidApplication
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:77:1: entryRuleAndroidApplication returns [EObject current=null] : iv_ruleAndroidApplication= ruleAndroidApplication EOF ;
    public final EObject entryRuleAndroidApplication() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAndroidApplication = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:78:2: (iv_ruleAndroidApplication= ruleAndroidApplication EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:79:2: iv_ruleAndroidApplication= ruleAndroidApplication EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAndroidApplicationRule(), currentNode); 
            pushFollow(FOLLOW_ruleAndroidApplication_in_entryRuleAndroidApplication75);
            iv_ruleAndroidApplication=ruleAndroidApplication();
            _fsp--;

             current =iv_ruleAndroidApplication; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAndroidApplication85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAndroidApplication


    // $ANTLR start ruleAndroidApplication
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:86:1: ruleAndroidApplication returns [EObject current=null] : ( 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) '{' 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) 'package' ( (lv_packageName_6_0= ruleFQN ) ) ( 'datamodel' ( ( RULE_ID ) ) )? 'uimodel' ( ( RULE_ID ) ) '}' ) ;
    public final EObject ruleAndroidApplication() throws RecognitionException {
        EObject current = null;

        Token lv_applicationName_1_0=null;
        AntlrDatatypeRuleToken lv_projectName_4_0 = null;

        AntlrDatatypeRuleToken lv_packageName_6_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:91:6: ( ( 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) '{' 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) 'package' ( (lv_packageName_6_0= ruleFQN ) ) ( 'datamodel' ( ( RULE_ID ) ) )? 'uimodel' ( ( RULE_ID ) ) '}' ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:92:1: ( 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) '{' 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) 'package' ( (lv_packageName_6_0= ruleFQN ) ) ( 'datamodel' ( ( RULE_ID ) ) )? 'uimodel' ( ( RULE_ID ) ) '}' )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:92:1: ( 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) '{' 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) 'package' ( (lv_packageName_6_0= ruleFQN ) ) ( 'datamodel' ( ( RULE_ID ) ) )? 'uimodel' ( ( RULE_ID ) ) '}' )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:92:3: 'AndroidApplication' ( (lv_applicationName_1_0= RULE_STRING ) ) '{' 'projectName' ( (lv_projectName_4_0= ruleFQN ) ) 'package' ( (lv_packageName_6_0= ruleFQN ) ) ( 'datamodel' ( ( RULE_ID ) ) )? 'uimodel' ( ( RULE_ID ) ) '}'
            {
            match(input,11,FOLLOW_11_in_ruleAndroidApplication120); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getAndroidApplicationKeyword_0(), null); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:96:1: ( (lv_applicationName_1_0= RULE_STRING ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:97:1: (lv_applicationName_1_0= RULE_STRING )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:97:1: (lv_applicationName_1_0= RULE_STRING )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:98:3: lv_applicationName_1_0= RULE_STRING
            {
            lv_applicationName_1_0=(Token)input.LT(1);
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleAndroidApplication137); 

            			createLeafNode(grammarAccess.getAndroidApplicationAccess().getApplicationNameSTRINGTerminalRuleCall_1_0(), "applicationName"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAndroidApplicationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"applicationName",
            	        		lv_applicationName_1_0, 
            	        		"STRING", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleAndroidApplication152); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            match(input,13,FOLLOW_13_in_ruleAndroidApplication162); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getProjectNameKeyword_3(), null); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:128:1: ( (lv_projectName_4_0= ruleFQN ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:129:1: (lv_projectName_4_0= ruleFQN )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:129:1: (lv_projectName_4_0= ruleFQN )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:130:3: lv_projectName_4_0= ruleFQN
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getAndroidApplicationAccess().getProjectNameFQNParserRuleCall_4_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleFQN_in_ruleAndroidApplication183);
            lv_projectName_4_0=ruleFQN();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAndroidApplicationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"projectName",
            	        		lv_projectName_4_0, 
            	        		"FQN", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,14,FOLLOW_14_in_ruleAndroidApplication193); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getPackageKeyword_5(), null); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:156:1: ( (lv_packageName_6_0= ruleFQN ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:157:1: (lv_packageName_6_0= ruleFQN )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:157:1: (lv_packageName_6_0= ruleFQN )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:158:3: lv_packageName_6_0= ruleFQN
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getAndroidApplicationAccess().getPackageNameFQNParserRuleCall_6_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleFQN_in_ruleAndroidApplication214);
            lv_packageName_6_0=ruleFQN();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAndroidApplicationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"packageName",
            	        		lv_packageName_6_0, 
            	        		"FQN", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:180:2: ( 'datamodel' ( ( RULE_ID ) ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==15) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:180:4: 'datamodel' ( ( RULE_ID ) )
                    {
                    match(input,15,FOLLOW_15_in_ruleAndroidApplication225); 

                            createLeafNode(grammarAccess.getAndroidApplicationAccess().getDatamodelKeyword_7_0(), null); 
                        
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:184:1: ( ( RULE_ID ) )
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:185:1: ( RULE_ID )
                    {
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:185:1: ( RULE_ID )
                    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:186:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getAndroidApplicationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroidApplication243); 

                    		createLeafNode(grammarAccess.getAndroidApplicationAccess().getDataAndroDataRootCrossReference_7_1_0(), "data"); 
                    	

                    }


                    }


                    }
                    break;

            }

            match(input,16,FOLLOW_16_in_ruleAndroidApplication255); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getUimodelKeyword_8(), null); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:202:1: ( ( RULE_ID ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:203:1: ( RULE_ID )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:203:1: ( RULE_ID )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:204:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getAndroidApplicationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroidApplication273); 

            		createLeafNode(grammarAccess.getAndroidApplicationAccess().getUiAndroNavRootCrossReference_9_0(), "ui"); 
            	

            }


            }

            match(input,17,FOLLOW_17_in_ruleAndroidApplication283); 

                    createLeafNode(grammarAccess.getAndroidApplicationAccess().getRightCurlyBracketKeyword_10(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAndroidApplication


    // $ANTLR start entryRulePlainString
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:230:1: entryRulePlainString returns [EObject current=null] : iv_rulePlainString= rulePlainString EOF ;
    public final EObject entryRulePlainString() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePlainString = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:231:2: (iv_rulePlainString= rulePlainString EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:232:2: iv_rulePlainString= rulePlainString EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPlainStringRule(), currentNode); 
            pushFollow(FOLLOW_rulePlainString_in_entryRulePlainString321);
            iv_rulePlainString=rulePlainString();
            _fsp--;

             current =iv_rulePlainString; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePlainString331); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePlainString


    // $ANTLR start rulePlainString
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:239:1: rulePlainString returns [EObject current=null] : ( (lv_value_0_0= RULE_STRING ) ) ;
    public final EObject rulePlainString() throws RecognitionException {
        EObject current = null;

        Token lv_value_0_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:244:6: ( ( (lv_value_0_0= RULE_STRING ) ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:245:1: ( (lv_value_0_0= RULE_STRING ) )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:245:1: ( (lv_value_0_0= RULE_STRING ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:246:1: (lv_value_0_0= RULE_STRING )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:246:1: (lv_value_0_0= RULE_STRING )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:247:3: lv_value_0_0= RULE_STRING
            {
            lv_value_0_0=(Token)input.LT(1);
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulePlainString372); 

            			createLeafNode(grammarAccess.getPlainStringAccess().getValueSTRINGTerminalRuleCall_0(), "value"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getPlainStringRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"value",
            	        		lv_value_0_0, 
            	        		"STRING", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePlainString


    // $ANTLR start entryRuleFQN
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:279:1: entryRuleFQN returns [String current=null] : iv_ruleFQN= ruleFQN EOF ;
    public final String entryRuleFQN() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleFQN = null;


        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:280:2: (iv_ruleFQN= ruleFQN EOF )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:281:2: iv_ruleFQN= ruleFQN EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFQNRule(), currentNode); 
            pushFollow(FOLLOW_ruleFQN_in_entryRuleFQN415);
            iv_ruleFQN=ruleFQN();
            _fsp--;

             current =iv_ruleFQN.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFQN426); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFQN


    // $ANTLR start ruleFQN
    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:288:1: ruleFQN returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleFQN() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:293:6: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:294:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:294:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:294:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFQN466); 

            		current.merge(this_ID_0);
                
             
                createLeafNode(grammarAccess.getFQNAccess().getIDTerminalRuleCall_0(), null); 
                
            // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:301:1: (kw= '.' this_ID_2= RULE_ID )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==18) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.age/src-gen/hu/bme/mit/androtext/age/parser/antlr/internal/InternalAge.g:302:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)input.LT(1);
            	    match(input,18,FOLLOW_18_in_ruleFQN485); 

            	            current.merge(kw);
            	            createLeafNode(grammarAccess.getFQNAccess().getFullStopKeyword_1_0(), null); 
            	        
            	    this_ID_2=(Token)input.LT(1);
            	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFQN500); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        createLeafNode(grammarAccess.getFQNAccess().getIDTerminalRuleCall_1_1(), null); 
            	        

            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFQN


 

    public static final BitSet FOLLOW_ruleAndroidApplication_in_entryRuleAndroidApplication75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAndroidApplication85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleAndroidApplication120 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleAndroidApplication137 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleAndroidApplication152 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleAndroidApplication162 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_ruleFQN_in_ruleAndroidApplication183 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleAndroidApplication193 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_ruleFQN_in_ruleAndroidApplication214 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleAndroidApplication225 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroidApplication243 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_ruleAndroidApplication255 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroidApplication273 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleAndroidApplication283 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlainString_in_entryRulePlainString321 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePlainString331 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_rulePlainString372 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFQN_in_entryRuleFQN415 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFQN426 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFQN466 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleFQN485 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFQN500 = new BitSet(new long[]{0x0000000000040002L});

}